/**
 *                            License
 * THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS  
 * CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). 
 * THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW.  
 * ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR  
 * COPYRIGHT LAW IS PROHIBITED.
 * 
 * BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND  
 * AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE  
 * MAY BE CONSIDERED TO BE A CONTRACT,
 * THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED 
 * HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
 * 
 */
package com.gui.manager;

import static com.lineage.server.model.skill.L1SkillId.ADVANCE_SPIRIT;
import static com.lineage.server.model.skill.L1SkillId.BLESS_WEAPON;
import static com.lineage.server.model.skill.L1SkillId.BURNING_WEAPON;
import static com.lineage.server.model.skill.L1SkillId.FULL_HEAL;
import static com.lineage.server.model.skill.L1SkillId.IMMUNE_TO_HARM;
import static com.lineage.server.model.skill.L1SkillId.IRON_SKIN;
import static com.lineage.server.model.skill.L1SkillId.NATURES_TOUCH;
import static com.lineage.server.model.skill.L1SkillId.PHYSICAL_ENCHANT_DEX;
import static com.lineage.server.model.skill.L1SkillId.PHYSICAL_ENCHANT_STR;
import static com.lineage.server.packetserver.S_SkillIconGFX.BAN_CHAT;

import java.awt.Button;
import java.awt.Checkbox;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.Label;
import java.awt.List;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFrame;

import com.lineage.L1DatabaseFactory;
import com.lineage.configure.Config;
import com.lineage.server.Account;
import com.lineage.server.GameServer;
import com.lineage.server.datatables.ItemTable;
import com.lineage.server.model.L1Inventory;
import com.lineage.server.model.L1PolyMorph;
import com.lineage.server.model.L1Teleport;
import com.lineage.server.model.L1World;
import com.lineage.server.model.Instance.L1ItemInstance;
import com.lineage.server.model.Instance.L1PcInstance;
import com.lineage.server.model.skill.L1SkillId;
import com.lineage.server.model.skill.L1SkillUse;
import com.lineage.server.packetserver.S_Disconnect;
import com.lineage.server.packetserver.S_SkillIconGFX;
import com.lineage.server.packetserver.S_SystemMessage;
import com.lineage.server.templates.L1Item;

/**
 * Class <code>ServerManager</code> 服务器管理器.
 * 
 * @author jrwz
 * @version 2012-5-19上午09:23:48
 * @see com
 * @since JDK1.7
 */
public final class ServerManager extends JFrame implements WindowListener,
        ActionListener, ItemListener {

    /**
     * 当按下回车键所允许的事件:全体聊天.
     */
    class EnterKey extends KeyAdapter {
        @Override
        public final void keyPressed(final KeyEvent e) {
            final int code = e.getKeyCode();
            if (code == KeyEvent.VK_ENTER) { // 按下回车键
                ServerManager.this.chatWorld();
            }
        }
    }

    /**
     * 当按下回车键所允许的事件2:封锁IP.
     */
    class EnterKey2 extends KeyAdapter {
        @Override
        public void keyPressed(final KeyEvent e) {
            final int code = e.getKeyCode();
            if (code == KeyEvent.VK_ENTER) { // 按下回车键
                ServerManager.this.banIp();
            }
        }
    }

    /**
     * 当按下回车键所允许的事件3:踢出游戏.
     */
    class EnterKey3 extends KeyAdapter {
        @Override
        public void keyPressed(final KeyEvent e) {
            final int code = e.getKeyCode();
            if (code == KeyEvent.VK_ENTER) { // 按下回车键
                ServerManager.this.disconnectCharacters();
            }
        }
    }

    /**
     * 当按下回车键所允许的事件4:禁言.
     */
    class EnterKey4 extends KeyAdapter {
        @Override
        public void keyPressed(final KeyEvent e) {
            final int code = e.getKeyCode();
            if (code == KeyEvent.VK_ENTER) { // 按下回车键
                ServerManager.this.banChat();
            }
        }
    }

    /** 实例. */
    private static ServerManager instance;

    /** 提示信息. */
    private static final Logger LOG = Logger.getLogger(ServerManager.class
            .getName());

    /**
     * 序列版本UID.
     */
    private static final long serialVersionUID = 1L;
    /** 给予道具框. */
    @SuppressWarnings("unused")
    private static Label 空白2 = new Label("                ");
    /** . */
    @SuppressWarnings("unused")
    private static Label 空白4 = new Label("                ");
    /** 聊天设置. */
    private static Label 空白 = new Label("          ");
    /** BanIP前. */
    private static Label 空白3 = new Label("　　　　　　　　　　　　　　　　");
    /** . */
    @SuppressWarnings("unused")
    private static Label 空白9 = new Label(" ");
    /** 列表. */
    public static List list = new List(14, false);
    /** 按下回车键4. */
    private final EnterKey4 enterKey4 = new EnterKey4();
    /** 按下回车键3. */
    private final EnterKey3 enterKey3 = new EnterKey3();
    /** 按下回车键2. */
    private final EnterKey2 enterKey2 = new EnterKey2();
    /** 按下回车键. */
    private final EnterKey enterKey = new EnterKey();
    /** 创建一个账户. */
    private static Button 创建账号 = new Button("创建账号");
    /** 文字:账号. */
    private static Label 文字_账号 = new Label("  账号");
    /** 文字:密码. */
    private static Label 文字_密码 = new Label("  密码");
    /** 文字:账号等级. */
    private static Label 文字_账号等级 = new Label("账号等级");
    /** 输入的账号. */
    private static TextField TEXT_账号 = new TextField("", 10);
    /** 输入的密码. */
    private static TextField TEXT_密码 = new TextField("", 10);
    /** 输入的账号等级. */
    private static TextField TEXT_账号等级 = new TextField("", 10);

    // 服务器设置
    /** DB 储存. */
    private static Checkbox DB储存 = new Checkbox("DB 储存");
    /** 文字说明:确认输入的为整数. */
    private static Label 文字_说明 = new Label("确认输入的为整数");
    /** 文字:号码确认. */
    private static Label 文字_强制变身_号码确认 = new Label("号码确认");
    /** 设置. */
    private static Button 服务器设置 = new Button("设置");
    /** 输入的冲武器成功率. */
    private static TextField TEXT_冲武器成功率 = new TextField("", 5);
    /** 输入的掉落金钱倍率. */
    private static TextField TEXT_掉落金钱倍率 = new TextField("", 5);
    /** 输入的掉落物品倍率. */
    private static TextField TEXT_掉落物品倍率 = new TextField("", 5);
    /** 输入的经验值倍率. */
    private static TextField TEXT_经验值倍率 = new TextField("", 5);
    /** 输入的全体聊天最低等级限制. */
    private static TextField TEXT_全体聊天最低等级限制 = new TextField("", 5);
    /** 输入的最高在线玩家数量. */
    private static TextField TEXT_最高在线玩家数量 = new TextField("", 5);
    /** 输入的自动创建账号. */
    private static TextField TEXT_自动创建账号方式 = new TextField("", 5);
    /** 输入的冲防具成功率 . */
    private static TextField TEXT_冲防具成功率 = new TextField("", 5);
    /** 输入的角色负重倍率. */
    private static TextField TEXT_角色负重倍率 = new TextField("", 5);
    /** 输入的正义值倍率. */
    private static TextField TEXT_正义值倍率 = new TextField("", 5);
    /** 文字:冲武器几率. */
    private static Label 文字_冲武器几率 = new Label("冲武器几率");
    /** 文字:掉落金币倍率. */
    private static Label 文字_掉落金币倍率 = new Label(" 掉落金币倍率");
    /** 文字:掉落道具倍率. */
    private static Label 文字_掉落道具倍率 = new Label(" 掉落道具倍率");
    /** 文字:经验倍率. */
    private static Label 文字_经验倍率 = new Label(" 经验倍率");
    /** 文字:全体聊天等级. */
    private static Label 文字_全体聊天等级 = new Label("  全体聊天等级");
    /** 文字:允许最大在线人数. */
    private static Label 文字_允许最大在线人数 = new Label("允许最大在线人数");
    /** 文字:自动生成类型(账号). */
    private static Label 文字_自动生成类型 = new Label("自动生成类型");
    /** 文字:冲装备几率. */
    private static Label 文字_冲装备几率 = new Label("冲装备几率");
    /** 文字:负重倍率. */
    private static Label 文字_负重倍率 = new Label("        负重倍率");
    /** 文字:正义倍率. */
    private static Label 文字_正义倍率 = new Label("    正义倍率");
    /** 驱逐:踢下线. */
    private static Button 驱逐 = new Button("驱逐");
    /** 输入的驱逐名字. */
    private static TextField TEXT_驱逐 = new TextField("", 10);
    /** 文字:│驱逐. */
    private static Label 文字_驱逐 = new Label("│驱逐");
    /** 禁言. */
    private static Button 禁言 = new Button("禁言");
    /** 输入的角色名称. */
    private static TextField TEXT_禁言 = new TextField("", 10);
    /** 文字:│禁言. */
    private static Label 文字_禁言 = new Label("│禁言");
    /** 数据库. */
    private static Button 数据库 = new Button("          数据库           ");
    /** 用户统计排行. */
    private static Button 用户统计排行 = new Button("        用户统计排行         ");
    /** 自动保存. */
    private static Button 自动保存 = new Button("           自动保存           ");
    /** 封锁IP. */
    private static Button 封锁IP = new Button("封锁");
    /** 输入的封锁IP. */
    private static TextField TEXT_封锁IP = new TextField("", 10);
    /** 文字:封锁IP. */
    private static Label 文字_封锁IP = new Label("封锁 IP");
    /** 聊天频道:组队聊天. */
    private static Checkbox 聊天频道_组队聊天 = new Checkbox("组队聊天 ");
    /** 聊天频道:大喊. */
    private static Checkbox 聊天频道_大喊 = new Checkbox("大喊 ");
    /** 聊天频道:交易. */
    private static Checkbox 聊天频道_交易 = new Checkbox("交易 ");
    /** 聊天频道:组队. */
    private static Checkbox 聊天频道_组队 = new Checkbox("组队 ");
    /** 聊天频道:血盟. */
    private static Checkbox 聊天频道_血盟 = new Checkbox("血盟 ");
    /** 聊天频道:全体. */
    private static Checkbox 聊天频道_全体 = new Checkbox("全体 ");
    /** 聊天频道:密语. */
    private static Checkbox 聊天频道_密语 = new Checkbox("密语 ");
    /** 聊天频道:一般. */
    private static Checkbox 聊天频道_一般 = new Checkbox("一般 ");
    /** 文字:聊天设置. */
    private static Label 文字_聊天设置 = new Label("聊天设置");
    /** 文字:全体聊天. */
    private static Label 文字_全体聊天 = new Label("全体聊天");
    /** 输入的聊天内容. */
    private static TextField TEXT_全体聊天 = new TextField("", 75);
    /** 发送. */
    private static Button 发送 = new Button("发送");
    /** 上方框内的文字. */
    public static TextArea 上方框内的文字 = new TextArea(
            "\r\n\r\n\r\n\r\n \t\t\t\t 天堂1简体仿正模拟器\n\n\n\n\n                                                                              \t\t\t\t\t\t\t Server Manager by 剑刃舞者       \n\n\n\n            ********************************************************************************\n                              ★      仅供研究JAVA..     ★\n********************************************************************************",
            13, 71, 1);
    /** 下方框内的文字. */
    public static TextArea 聊天窗口 = new TextArea(
            "\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n      　　　                          　    　    这里是聊天窗口.",
            16, 90, 1);
    /** 菜单栏. */
    private static MenuBar 菜单栏 = null;
    /** 带有指定标签的新菜单. */
    private static Menu 菜单按钮 = null;
    /** 菜单按钮:开机. */
    private static MenuItem 菜单按钮_开机 = null;
    /** 菜单按钮:直接关机. */
    private static MenuItem 菜单按钮_直接关机 = null;
    /** 菜单按钮:倒数关机. */
    private static MenuItem 菜单按钮_倒数关机 = null;
    /** 菜单按钮:保存. */
    private static MenuItem 菜单按钮_保存 = null;
    /** 菜单按钮:连接. */
    private static MenuItem 菜单按钮_连接 = null;
    /** 菜单按钮:服务器信息. */
    private static MenuItem 菜单按钮_服务器信息 = null;
    /** 菜单按钮:储存. */
    private static MenuItem 菜单按钮_储存 = null;
    /** 菜单按钮:结束. */
    private static MenuItem 菜单按钮_结束 = null;
    /** 工具按钮. */
    private static Menu 工具按钮 = null;
    /** 高级按钮. */
    private static Menu 高级按钮 = null;
    /** 菜单按钮:运行Navicat. */
    private static MenuItem 菜单按钮_运行Navicat = null;
    /** 帮助按钮. */
    private static Menu 帮助按钮 = null;
    /** 菜单按钮:检查更新. */
    private static MenuItem 菜单按钮_检查更新 = null;
    /** 菜单按钮:服务器设置. */
    private static MenuItem 菜单按钮_服务器设置 = null;
    /** 菜单按钮:创建一个账户. */
    private static MenuItem 菜单按钮_创建账号 = null;
    /** 菜单按钮:删除一个账户. */
    private static MenuItem 菜单按钮_删除账号 = null;
    /** 菜单按钮:开始网络连接. */
    private static MenuItem 菜单按钮_开始网络连接 = null;
    /** 菜单按钮:未知. */
    private static MenuItem 菜单按钮_未知 = null;
    /** 菜单按钮:送礼. */
    private static MenuItem 菜单按钮_送礼 = null;
    /** 菜单按钮:强制移动. */
    private static MenuItem 菜单按钮_强制移动 = null;
    /** 菜单按钮:全体禁言. */
    private static MenuItem 菜单按钮_全体禁言 = null;
    /** 菜单按钮:全体状态. */
    private static MenuItem 菜单按钮_全体状态 = null;
    /** 菜单按钮:强制变身. */
    private static MenuItem 菜单按钮_强制变身 = null;
    /** 给予道具. */
    private static Button 给予道具 = new Button("给予道具");
    /** 文字:角色名称. */
    private static Label 文字_角色名称 = new Label("  角色名称");
    /** 文字:道具编号. */
    private static Label 文字_道具编号 = new Label("  道具编号");
    /** 文字:强化等级. */
    private static Label 文字_强化等级 = new Label("  强化等级");
    /** 文字:道具数量. */
    private static Label 文字_道具数量 = new Label("    道具数量");
    /** 输入的角色名称. */
    private static TextField TEXT_道具_角色名称 = new TextField("", 10);
    /** 输入的道具编号. */
    private static TextField TEXT_道具_道具编号 = new TextField("", 10);
    /** 输入的强化等级. */
    private static TextField TEXT_道具_强化等级 = new TextField("", 10);
    /** 输入的道具数量. */
    private static TextField TEXT_道具_道具数量 = new TextField("", 10);
    /** 强制变身1. */
    private static Button 强制变身1 = new Button("变身");
    /** 文字:角色名称. */
    private static Label 文字_强制变身_角色名称 = new Label("  角色名称");
    /** 文字:变身编号. */
    private static Label 文字_强制变身_变身编号 = new Label("　变身编号");
    /** 输入的角色名称. */
    private static TextField TEXT_强制变身_角色名称 = new TextField("", 10);
    /** 输入的变身编号. */
    private static TextField TEXT_强制变身_变身编号 = new TextField("", 10);
    /** 强制移动. */
    private static Button 强制移动 = new Button("移动");
    /** 文字:角色名称. */
    private static Label 文字_强制移动_角色名称 = new Label("角色名称");
    /** 文字:X 坐标. */
    private static Label 文字_强制移动_X坐标 = new Label("  X  坐标");
    /** 文字:Y 坐标. */
    private static Label 文字_强制移动_Y坐标 = new Label("  Y  坐标");
    /** 文字:地图编号. */
    private static Label 文字_强制移动_地图编号 = new Label("地图编号");
    /** 输入的角色名称. */
    private static TextField TEXT_角色名称 = new TextField("", 10);
    /** 输入的X 坐标. */
    private static TextField TEXT_X坐标 = new TextField("", 10);
    /** 输入的Y 坐标. */
    private static TextField TEXT_Y坐标 = new TextField("", 10);
    /** 输入的地图编号. */
    private static TextField TEXT_地图编号 = new TextField("", 10);
    /** 框架:服务器管理器. */
    private static JFrame 框架_服务器管理器 = new JFrame("Server Manager");
    /** 框架:服务器设置. */
    private static JFrame 框架_服务器设置 = new JFrame("服务器设置");
    /** 框架:创建账号. */
    private static JFrame 框架_创建账号 = new JFrame("创建一个账户");
    /** 框架:送礼. */
    private static JFrame 框架_送礼 = new JFrame("送礼");
    /** 框架:强制变身. */
    private static JFrame 框架_强制变身 = new JFrame("变身");
    /** 框架:强制移动. */
    private static JFrame 框架_强制移动 = new JFrame("强制移动");

    /**
     * 实例为空时才产生一个.
     * 
     * @return 实例
     */
    public static ServerManager get() {
        if (instance == null) {
            instance = new ServerManager();
        }
        return instance;
    }

    /** 图片. */
    private final Image im = Toolkit.getDefaultToolkit().getImage(
            "./data/image/b.png");
    /** 取得当前时间. */
    private final Calendar now = Calendar.getInstance();
    /** 年. */
    private final int year = this.now.get(Calendar.YEAR);
    /** 月. */
    private final int month = this.now.get(Calendar.MONTH) + 1;
    /** 日. */
    private final int day = this.now.get(Calendar.DATE);
    /** 时. */
    private final int hour = this.now.get(Calendar.HOUR_OF_DAY);
    /** 分. */
    private final int min = this.now.get(Calendar.MINUTE);

    /** 取得日期格式(年、月、日、时、分). */
    private final String date = "." + this.year + "." + this.month + "."
            + this.day + "-" + this.hour + this.min;

    /**
     * 服务器管理器.
     */
    private ServerManager() {
        框架_服务器管理器.setIconImage(this.im);
        框架_服务器设置.setIconImage(this.im);
        框架_创建账号.setIconImage(this.im);
        框架_送礼.setIconImage(this.im);
        框架_强制变身.setIconImage(this.im);
        框架_强制移动.setIconImage(this.im); // 强制移动
        菜单栏 = new MenuBar(); // 创建一个新的菜单栏
        菜单按钮 = new Menu("菜单");
        菜单按钮_开机 = new MenuItem("启动服务器");
        final Menu subM = new Menu(); // 生成子菜单
        subM.setLabel("关闭服务器");
        菜单按钮_保存 = new MenuItem("世界上的信息储存");
        菜单按钮_倒数关机 = new MenuItem("定时关闭服务器");
        菜单按钮_直接关机 = new MenuItem("立即关闭服务器");
        菜单按钮_连接 = new MenuItem("查看当前在线玩家");
        菜单按钮_服务器信息 = new MenuItem("服务器信息");
        菜单按钮_储存 = new MenuItem("储存");
        菜单按钮_结束 = new MenuItem("退出");
        菜单按钮_开机.addActionListener(this);
        菜单按钮_直接关机.addActionListener(this);
        菜单按钮_倒数关机.addActionListener(this);
        菜单按钮_保存.addActionListener(this);
        菜单按钮_连接.addActionListener(this);
        菜单按钮_服务器信息.addActionListener(this);
        菜单按钮_储存.addActionListener(this);
        菜单按钮_结束.addActionListener(this);
        菜单按钮_服务器设置 = new MenuItem("服务器设置");
        菜单按钮_创建账号 = new MenuItem("创建一个账户");
        菜单按钮_删除账号 = new MenuItem("删除一个账户");
        菜单按钮_开始网络连接 = new MenuItem("开始网络连接");
        菜单按钮_未知 = new MenuItem("未知"); // 菜单追加部分
        菜单按钮_送礼 = new MenuItem("送礼");
        菜单按钮_强制移动 = new MenuItem("强制移动");
        菜单按钮_全体禁言 = new MenuItem("全体禁言");
        菜单按钮_全体状态 = new MenuItem("全体状态");
        菜单按钮_强制变身 = new MenuItem("强制变身");
        菜单按钮_全体禁言.addActionListener(this);
        菜单按钮_全体状态.addActionListener(this);
        菜单按钮.add(菜单按钮_开机);
        菜单按钮.add(subM);
        subM.add(菜单按钮_倒数关机);
        subM.add(菜单按钮_直接关机);
        菜单按钮.addSeparator();
        菜单按钮.add(菜单按钮_保存);
        菜单按钮.addSeparator();
        菜单按钮.add(菜单按钮_连接);
        菜单按钮.addSeparator();
        菜单按钮.add(菜单按钮_服务器信息);
        菜单按钮.add(菜单按钮_储存);
        菜单按钮.add(菜单按钮_结束);
        工具按钮 = new Menu("工具");
        菜单按钮_运行Navicat = new MenuItem("运行Navicat");
        菜单按钮_运行Navicat.addActionListener(this);
        菜单按钮_服务器设置.addActionListener(this);
        工具按钮.add(菜单按钮_创建账号);
        工具按钮.add(菜单按钮_删除账号);
        工具按钮.addSeparator();
        工具按钮.add(菜单按钮_开始网络连接);
        工具按钮.addSeparator();
        工具按钮.add(菜单按钮_服务器设置);
        工具按钮.addSeparator();
        工具按钮.add(菜单按钮_运行Navicat);
        菜单按钮_创建账号.addActionListener(this);
        菜单按钮_删除账号.addActionListener(this);
        菜单按钮_开始网络连接.addActionListener(this);
        高级按钮 = new Menu("高级");
        菜单按钮_未知.addActionListener(this);
        高级按钮.add(菜单按钮_未知);
        高级按钮.addSeparator(); // 添加一个分隔行
        高级按钮.add(菜单按钮_送礼); // 送礼
        高级按钮.add(菜单按钮_强制变身); // 强制变身
        高级按钮.add(菜单按钮_强制移动); // 强制移动
        高级按钮.add(菜单按钮_全体禁言); // 全体禁言
        高级按钮.add(菜单按钮_全体状态); // 全体状态
        帮助按钮 = new Menu("帮助");
        菜单按钮_检查更新 = new MenuItem("检查更新");
        菜单按钮_检查更新.addActionListener(this);
        帮助按钮.add(菜单按钮_检查更新);
        菜单栏.add(菜单按钮);
        菜单栏.add(工具按钮);
        菜单栏.add(高级按钮);
        菜单栏.add(帮助按钮);
        框架_服务器管理器.setMenuBar(菜单栏);
        框架_服务器管理器.setLayout(new FlowLayout());
        框架_服务器管理器.setSize(720, 670);
        框架_服务器管理器.setLocation(450, 300);
        框架_服务器管理器.setResizable(false);
        框架_服务器管理器.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        上方框内的文字.setEditable(false);
        框架_服务器管理器.add(上方框内的文字);
        框架_服务器管理器.add(list);
        框架_服务器管理器.add(用户统计排行);
        框架_服务器管理器.add(数据库);
        框架_服务器管理器.add(自动保存);
        框架_服务器管理器.add(聊天窗口);
        用户统计排行.addActionListener(this);
        数据库.addActionListener(this);
        自动保存.addActionListener(this);
        框架_服务器管理器.add(文字_全体聊天);
        框架_服务器管理器.add(TEXT_全体聊天);
        框架_服务器管理器.add(发送);
        TEXT_全体聊天.addKeyListener(this.enterKey);
        框架_服务器管理器.add(空白);
        框架_服务器管理器.add(文字_聊天设置);
        框架_服务器管理器.add(聊天频道_一般);
        框架_服务器管理器.add(聊天频道_密语);
        框架_服务器管理器.add(聊天频道_全体);
        框架_服务器管理器.add(聊天频道_血盟);
        框架_服务器管理器.add(聊天频道_组队);
        框架_服务器管理器.add(聊天频道_交易);
        框架_服务器管理器.add(聊天频道_大喊);
        框架_服务器管理器.add(聊天频道_组队聊天); // 组队聊天
        聊天频道_一般.addItemListener(this);
        聊天频道_密语.addItemListener(this);
        聊天频道_全体.addItemListener(this);
        聊天频道_血盟.addItemListener(this);
        聊天频道_组队.addItemListener(this);
        聊天频道_交易.addItemListener(this);
        聊天频道_大喊.addItemListener(this);
        聊天频道_组队聊天.addItemListener(this); // 组队聊天
        框架_服务器管理器.add(空白3);
        框架_服务器管理器.add(文字_封锁IP);
        框架_服务器管理器.add(TEXT_封锁IP);
        框架_服务器管理器.add(封锁IP);
        TEXT_封锁IP.addKeyListener(this.enterKey2);
        框架_服务器管理器.add(文字_驱逐);
        框架_服务器管理器.add(TEXT_驱逐);
        框架_服务器管理器.add(驱逐);
        TEXT_驱逐.addKeyListener(this.enterKey3);
        框架_服务器管理器.add(文字_禁言);
        框架_服务器管理器.add(TEXT_禁言);
        框架_服务器管理器.add(禁言);
        TEXT_禁言.addKeyListener(this.enterKey4);
        禁言.addActionListener(this);
        驱逐.addActionListener(this);
        发送.addActionListener(this);
        封锁IP.addActionListener(this);
        框架_服务器管理器.setVisible(true);
        框架_服务器管理器.addWindowListener(this);
        // 服务器设置
        文字_说明.setForeground(Color.RED);
        文字_强制变身_号码确认.setForeground(Color.RED);
        数据库.setForeground(Color.RED);
        框架_服务器设置.add(文字_自动生成类型);
        框架_服务器设置.add(TEXT_自动创建账号方式); // 自动创建账号
        框架_服务器设置.add(文字_允许最大在线人数);
        框架_服务器设置.add(TEXT_最高在线玩家数量);
        框架_服务器设置.add(文字_全体聊天等级);
        框架_服务器设置.add(TEXT_全体聊天最低等级限制);
        框架_服务器设置.add(文字_经验倍率);
        框架_服务器设置.add(TEXT_经验值倍率);
        框架_服务器设置.add(文字_掉落道具倍率);
        框架_服务器设置.add(TEXT_掉落物品倍率);
        框架_服务器设置.add(文字_掉落金币倍率);
        框架_服务器设置.add(TEXT_掉落金钱倍率);
        框架_服务器设置.add(文字_冲武器几率);
        框架_服务器设置.add(TEXT_冲武器成功率);
        框架_服务器设置.add(文字_冲装备几率);
        框架_服务器设置.add(TEXT_冲防具成功率);
        框架_服务器设置.add(文字_负重倍率);
        框架_服务器设置.add(TEXT_角色负重倍率);
        框架_服务器设置.add(文字_正义倍率);
        框架_服务器设置.add(TEXT_正义值倍率); // 正义值倍率
        框架_服务器设置.add(文字_说明);
        框架_服务器设置.add(DB储存);
        框架_服务器设置.add(服务器设置);
        DB储存.addItemListener(this);
        服务器设置.addActionListener(this);
        框架_创建账号.add(文字_账号);
        框架_创建账号.add(TEXT_账号);
        框架_创建账号.add(文字_密码);
        框架_创建账号.add(TEXT_密码);
        框架_创建账号.add(文字_账号等级);
        框架_创建账号.add(TEXT_账号等级);
        框架_创建账号.add(创建账号);
        创建账号.addActionListener(this);
        框架_送礼.add(文字_角色名称);
        框架_送礼.add(TEXT_道具_角色名称);
        框架_送礼.add(文字_道具编号);
        框架_送礼.add(TEXT_道具_道具编号);
        框架_送礼.add(文字_强化等级);
        框架_送礼.add(TEXT_道具_强化等级);
        框架_送礼.add(文字_道具数量);
        框架_送礼.add(TEXT_道具_道具数量);
        框架_送礼.add(给予道具);
        给予道具.addActionListener(this);
        菜单按钮_送礼.addActionListener(this);
        框架_强制变身.add(文字_强制变身_角色名称);
        框架_强制变身.add(TEXT_强制变身_角色名称);
        框架_强制变身.add(文字_强制变身_变身编号);
        框架_强制变身.add(TEXT_强制变身_变身编号);
        框架_强制变身.add(文字_强制变身_号码确认);
        框架_强制变身.add(强制变身1);
        强制变身1.addActionListener(this);
        菜单按钮_强制变身.addActionListener(this);
        框架_强制移动.add(文字_强制移动_角色名称); // 强制移动(角色名称)
        框架_强制移动.add(TEXT_角色名称); // 强制移动(角色名称)
        框架_强制移动.add(文字_强制移动_X坐标); // 强制移动(X 坐标)
        框架_强制移动.add(TEXT_X坐标); // 强制移动(X 坐标)
        框架_强制移动.add(文字_强制移动_Y坐标); // 强制移动(Y 坐标)
        框架_强制移动.add(TEXT_Y坐标); // 强制移动(Y 坐标)
        框架_强制移动.add(文字_强制移动_地图编号); // 强制移动(地图编号)
        框架_强制移动.add(TEXT_地图编号); // 强制移动(地图编号)
        框架_强制移动.add(强制移动); // 强制移动
        强制移动.addActionListener(this);
        菜单按钮_强制移动.addActionListener(this); // 强制移动
        ManagerControl.get().setAction(true);
    }

    @Override
    public void actionPerformed(final ActionEvent e) {
        final String menu = e.getActionCommand();
        if (menu == "启动服务器") {
            上方框内的文字.append("\n[讯息] 无此功能.");
        } else if (menu == "立即关闭服务器") {
            this.closeServer();
        } else if (menu == "定时关闭服务器") {
            上方框内的文字.append("\n[讯息] 此功能尚未实装.");
        } else if (menu == "服务器计时结束") {
            上方框内的文字.append("\n[讯息] 无此功能.");
        } else if (menu == "世界上的信息储存") {
            上方框内的文字.append("\n[讯息] 无此功能.");
        } else if (menu == "服务器设置") {
            this.setServer();
        } else if (menu == "创建一个账户") {
            this.setAccount();
        } else if (menu == "删除一个账户") {
            上方框内的文字.append("\n[讯息] 无此功能.");
        } else if (menu == "强制移动") {
            this.setMove();
        } else if (menu == "开始网络连接") {
            上方框内的文字.append("\n[讯息] 无此功能.");
        } else if (menu == "查看当前在线玩家") {
            this.showAllPc();
        } else if (menu == "服务器信息") {
            this.serverMessage();
        } else if (menu == "储存") {
            this.saveLog();
        } else if (menu == "退出") {
            this.quitManager();
        } else if (menu == "运行Navicat") {
            this.runNavicat();
        } else if (menu == "未知") {
            上方框内的文字.append("\n[讯息] 此功能尚未实装.");
        } else if (menu == "检查更新") {
            this.checkNew();
        } else if (menu == "全体禁言") {
            this.banChatAll();
        } else if (menu == "全体状态") {
            this.buffAll();
        } else if (menu == "强制变身") {
            this.setPoly();
        } else if (menu == "送礼") {
            this.setGive();
        } else if (e.getActionCommand().equals("发送")) {
            this.chatWorld();
        } else if (e.getActionCommand().equals("驱逐")) {
            this.disconnectCharacters();
        } else if (e.getActionCommand().equals("          数据库           ")) {
            上方框内的文字.append("\n[讯息] 此功能尚未实装.");
        } else if (e.getActionCommand().equals("        用户统计排行         ")) {
            上方框内的文字.append("\n[讯息] 此功能尚未实装.");
        } else if (e.getActionCommand().equals("           自动保存           ")) {
            上方框内的文字.append("\n[讯息] 此功能尚未实装.");
        } else if (e.getActionCommand().equals("禁言")) {
            this.banChat();
        } else if (e.getActionCommand().equals("移动")) {
            this.movePc();
        } else if (e.getActionCommand().equals("封锁")) {
            this.banIp();
        } else if (e.getActionCommand().equals("创建账号")) {
            this.createAccount();
        } else if (e.getActionCommand().equals("变身")) {
            this.poly();
        } else if (e.getActionCommand().equals("给予道具")) {
            this.giveItem();
        } else if (e.getActionCommand().equals("设置")) {
            this.serverConfg();
            框架_服务器设置.setVisible(false);
        }
    }

    /**
     * 禁言.
     */
    private void banChat() {
        if (ManagerControl.get().isAction()) {
            for (final L1PcInstance pc : L1World.getInstance().getAllPlayers()) {
                final String name = TEXT_禁言.getText();
                if (pc.getName().equalsIgnoreCase(name)) {
                    pc.removeSkillEffect(L1SkillId.STATUS_CHAT_PROHIBITED);
                    final int time = 300;
                    pc.setSkillEffect(L1SkillId.STATUS_CHAT_PROHIBITED,
                            time * 1000);
                    pc.sendPackets(new S_SkillIconGFX(BAN_CHAT, time));
                    pc.sendPackets(new S_SystemMessage("你被管理员禁言5分钟."));
                    上方框内的文字.append("\n[讯息] " + name + " 已被禁言5分钟.");
                    TEXT_禁言.setText("");
                }
            }
        } else {
            上方框内的文字.append("\n服务器没有运行.");
            TEXT_禁言.setText("");
        }
    }

    /**
     * 全体禁言.
     */
    private void banChatAll() {
        if (ManagerControl.get().isAction()) {
            for (final L1PcInstance pc : L1World.getInstance().getAllPlayers()) {
                final int time = 300;
                pc.removeSkillEffect(L1SkillId.STATUS_CHAT_PROHIBITED);
                pc.setSkillEffect(L1SkillId.STATUS_CHAT_PROHIBITED, time * 1000);
                pc.sendPackets(new S_SkillIconGFX(BAN_CHAT, time));
                pc.sendPackets(new S_SystemMessage("你被管理员禁言5分钟."));
                上方框内的文字.append("\n[讯息] 全部玩家被禁言5分钟.");
            }
        } else {
            上方框内的文字.append("\n服务器没有运行.");
        }
    }

    /**
     * 封锁IP.
     */
    private void banIp() {
        if (ManagerControl.get().isAction()) {
            final String ip = TEXT_封锁IP.getText();
            final Pattern p = Pattern
                    .compile("(2[5][0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})"
                            + "\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})"
                            + "\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})"
                            + "\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})");
            final Matcher m = p.matcher(ip);
            if ((!ip.equals("")) && (m.matches())) {
                Connection con = null;
                PreparedStatement statement = null;
                try {
                    con = L1DatabaseFactory.getInstance().getConnection();
                    statement = con
                            .prepareStatement("INSERT INTO ban_ip SET ip=?");
                    statement.setString(1, ip);
                    statement.execute();
                    statement.close();
                    con.close();
                } catch (final SQLException ea) {
                    上方框内的文字.append("\n[讯息] Bad IP 封锁发生错误..");
                }
                上方框内的文字.append("\n[讯息] Bad IP: " + ip + " 此IP已被封锁.");
                TEXT_封锁IP.setText("");
            } else {
                上方框内的文字.append("\n请输入正确的IP格式,例如:(127.0.0.1).");
                TEXT_封锁IP.setText("");
            }
        } else {
            上方框内的文字.append("\n服务器没有运行.");
            TEXT_封锁IP.setText("");
        }
    }

    /**
     * 全体状态.
     */
    private void buffAll() {
        if (ManagerControl.get().isAction()) {
            final int[] allBuffSkill = { PHYSICAL_ENCHANT_DEX,
                    PHYSICAL_ENCHANT_STR, BLESS_WEAPON, FULL_HEAL,
                    IMMUNE_TO_HARM, ADVANCE_SPIRIT, NATURES_TOUCH,
                    BURNING_WEAPON, IRON_SKIN };

            try {
                for (final L1PcInstance pc : L1World.getInstance()
                        .getAllPlayers()) {
                    final L1SkillUse l1skilluse = new L1SkillUse();
                    for (final int element : allBuffSkill) {
                        l1skilluse.handleCommands(pc, element, pc.getId(),
                                pc.getX(), pc.getY(), null, 0,
                                L1SkillUse.TYPE_GMBUFF);
                    }
                }
            } catch (final Exception e1) {
                LOG.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
            }
            上方框内的文字.append("\n[讯息] 为所有在线玩家加状态.");
        } else {
            上方框内的文字.append("\n服务器没有运行.");
        }
    }

    /**
     * 全体聊天.
     */
    private void chatWorld() {
        if (ManagerControl.get().isAction()) {
            for (final L1PcInstance pc : L1World.getInstance().getAllPlayers()) {
                pc.sendPackets(new S_SystemMessage("[******]"
                        + TEXT_全体聊天.getText()));
            }
            聊天窗口.append("\r\n[******] " + TEXT_全体聊天.getText());
            TEXT_全体聊天.setText("");
        } else {
            上方框内的文字.append("\n服务器没有运行.");
            TEXT_全体聊天.setText("");
        }
    }

    /**
     * 检查更新.
     */
    private void checkNew() {
        try {
            Runtime.getRuntime()
                    .exec("C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE http://code.google.com/p/lineage-cn-jrwz/source/list");
        } catch (final IOException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 关闭服务器.
     */
    private void closeServer() {
        if (ManagerControl.get().isAction()) {
            this.saveLog(); // 储存讯息
            框架_服务器管理器.setVisible(false);
            this.dispose(); // 释放系统资源
            GameServer.getInstance().shutdown(); // 关机
        } else {
            上方框内的文字.append("\n服务器没有运行.");
        }
    }

    /**
     * 创建账号.
     */
    private void createAccount() {
        if (ManagerControl.get().isAction()) {
            final String name = TEXT_账号.getText();
            final String password = TEXT_密码.getText();
            if (!(name.equals("")) && !(password.equals(""))) {
                final String ip = "000.000.000.000";
                final String host = "000.000.000.000";
                Account.create(name, password, ip, host);
                上方框内的文字.append("\n[讯息] 账号 " + name + " 已成功创建.");
                TEXT_账号.setText("");
                TEXT_密码.setText("");
            } else {
                上方框内的文字.append("\n[讯息] 账号资料不能为空.");
                TEXT_账号.setText("");
                TEXT_密码.setText("");
            }
        } else {
            上方框内的文字.append("\n服务器没有运行.");
            TEXT_账号.setText("");
            TEXT_密码.setText("");
        }
    }

    /**
     * 将玩家踢出游戏.
     */
    private void disconnectCharacters() {
        if (ManagerControl.get().isAction()) {
            final String name = TEXT_驱逐.getText();
            final L1PcInstance target = L1World.getInstance().getPlayer(name);
            if (target != null) {
                this.sendMessageAll(target.getName() + " 被管理员踢出游戏。");
                上方框内的文字.append("\n[讯息] " + target.getName() + " 被踢出游戏 "
                        + "IP:\t" + target.getNetConnection().getIp());
                target.sendPackets(new S_Disconnect());
                // ClientThread.quitGame(target);
                // L1World.getInstance().removeObject(target);
                // target.getNetConnection().setActiveChar(null);
                // target.getNetConnection().kick();

                // final Account account = Account.load(target.getAccountName());
                // Account.online(account, false);
                TEXT_驱逐.setText("");
            } else {
                上方框内的文字.append("\n[讯息] 无此玩家或不在线.");
                TEXT_驱逐.setText("");
            }
        } else {
            上方框内的文字.append("\n服务器没有运行.");
            TEXT_驱逐.setText("");
        }
    }

    /**
     * 给予道具.
     */
    private void giveItem() {
        for (final L1PcInstance pc : L1World.getInstance().getAllPlayers()) {
            final String name = TEXT_道具_角色名称.getText();
            if (pc.getName().equalsIgnoreCase(name)) {
                final String text = TEXT_道具_道具编号.getText();
                final int itemId = Integer.parseInt(text);
                final L1Item temp = ItemTable.getInstance().getTemplate(itemId);
                if (temp != null) {
                    final L1ItemInstance item = ItemTable.getInstance()
                            .createItem(itemId);
                    final int enchant = Integer
                            .parseInt(TEXT_道具_强化等级.getText());
                    item.setEnchantLevel(enchant);
                    final int count = Integer.parseInt(TEXT_道具_道具数量.getText());
                    item.setCount(count);
                    if (pc.getInventory().checkAddItem(item, count) == L1Inventory.OK) {
                        pc.getInventory().storeItem(item);
                    } else { // 如果身上道具满则掉落地面上
                        L1World.getInstance()
                                .getInventory(pc.getX(), pc.getY(),
                                        pc.getMapId()).storeItem(item);
                    }
                    pc.sendPackets(new S_SystemMessage("管理员给你 "
                            + temp.getName() + " 数量 " + count + "。"));
                    上方框内的文字.append("\n[讯息] 给予 " + name + " " + temp.getName()
                            + " 数量 " + count + ".");
                } else {
                    上方框内的文字.append("\n[讯息] 此类道具不存在.");
                }
            } else {
                上方框内的文字.append("\n[讯息] 无此玩家或不在线.");
            }
        }
    }

    /**
     * 更改项目状态.
     * 
     * @param ie
     *            事件
     */
    public void itemStateChanged(final ItemEvent ie) {
        // 最初发生 Event 的对象
        // System.out.println("itemevent : " + ie.getSource());
        final boolean a = 聊天频道_一般.getState(); // 以布尔值形式表示的此复选框的状态true or false
        final boolean b = 聊天频道_密语.getState();
        final boolean c = 聊天频道_全体.getState();
        final boolean d = 聊天频道_血盟.getState();
        final boolean e = 聊天频道_组队.getState();
        final boolean f = 聊天频道_交易.getState();
        final boolean g = 聊天频道_大喊.getState();
        final boolean e2 = 聊天频道_组队聊天.getState(); // 组队聊天
        final boolean h = DB储存.getState();

        if (ie.getSource() == 聊天频道_一般) {
            ManagerControl.get().setNormal(true);
            if (!a) {
                ManagerControl.get().setNormal(false);
            }
        } else if (ie.getSource() == 聊天频道_密语) {
            ManagerControl.get().setPassphrase(true);
            if (!b) {
                ManagerControl.get().setPassphrase(false);
            }
        } else if (ie.getSource() == 聊天频道_全体) {
            ManagerControl.get().setChatWorld(true);
            if (!c) {
                ManagerControl.get().setChatWorld(false);
            }
        } else if (ie.getSource() == 聊天频道_血盟) {
            ManagerControl.get().setChatClan(true);
            if (!d) {
                ManagerControl.get().setChatClan(false);
            }
        } else if (ie.getSource() == 聊天频道_组队) {
            ManagerControl.get().setChatParty(true);
            if (!e) {
                ManagerControl.get().setChatParty(false);
            }
        } else if (ie.getSource() == 聊天频道_交易) {
            ManagerControl.get().setChatTrade(true);
            if (!f) {
                ManagerControl.get().setChatTrade(false);
            }
        } else if (ie.getSource() == 聊天频道_大喊) {
            ManagerControl.get().setChatShout(true);
            if (!g) {
                ManagerControl.get().setChatShout(false);
            }
        } else if (ie.getSource() == 聊天频道_组队聊天) { // 组队聊天
            ManagerControl.get().setChatPartyChat(true);
            if (!e2) {
                ManagerControl.get().setChatPartyChat(false);
            }
        } else if (ie.getSource() == DB储存) {
            ManagerControl.get().setSave(true);
            if (!h) {
                ManagerControl.get().setSave(false);
            }
        }
    }

    /**
     * 创建文件夹.
     * 
     * @param user
     *            使用者名称
     */
    @SuppressWarnings("unused")
    private void makeFolder(final String user) {
        // -- 创建一个文件夹
        File folder = new File("DB/" + user);
        try {
            folder.mkdir();
        } catch (final Exception e1) {
            LOG.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
        }
        folder = new File("DB/" + user + "/保存");
        try {
            folder.mkdir();
        } catch (final Exception e1) {
            LOG.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
        }
        folder = new File("DB/" + user + "/道具");
        try {
            folder.mkdir();
        } catch (final Exception e1) {
            LOG.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
        }
        folder = new File("DB/" + user + "/技能");
        try {
            folder.mkdir();
        } catch (final Exception e1) {
            LOG.log(Level.SEVERE, e1.getLocalizedMessage(), e1);
        }

        folder = null;
    }

    /**
     * 强制移动角色.
     */
    private void movePc() {
        if (ManagerControl.get().isAction()) {
            for (final L1PcInstance pc : L1World.getInstance().getAllPlayers()) {
                final String name = TEXT_角色名称.getText();
                if (pc.getName().equalsIgnoreCase(name)) { // 角色名称
                    final int locX = Integer.parseInt(TEXT_X坐标.getText());
                    final int locY = Integer.parseInt(TEXT_Y坐标.getText());
                    final int mapId = Integer.parseInt(TEXT_地图编号.getText());
                    L1Teleport.teleport(pc, locX, locY, mapId, 5, false);
                    上方框内的文字.append("\n[讯息] " + name + " 已被强制移动.");
                } else {
                    上方框内的文字.append("\n[讯息] " + name + " 该名称不存在.");
                }
            }
        } else {
            上方框内的文字.append("\n服务器没有运行.");
        }
    }

    /**
     * 变身.
     */
    private void poly() {
        final String name = TEXT_强制变身_角色名称.getText();
        final L1PcInstance tg = L1World.getInstance().getPlayer(name);
        if (tg != null) {
            final String text = TEXT_强制变身_变身编号.getText();
            final int polyId = Integer.parseInt(text);
            final int time = 7200;
            L1PolyMorph.doPoly(tg, polyId, time, L1PolyMorph.MORPH_BY_GM);
            tg.sendPackets(new S_SystemMessage("你被管理员强制变身。"));
            上方框内的文字.append("\n[讯息] " + name + " 该角色已被强制变身.");
        } else {
            上方框内的文字.append("\n[讯息] " + name + " 不在线或没有这个人.");
        }
    }

    /**
     * 退出管理器.
     */
    public void quitManager() {
        this.saveLog();
        框架_服务器管理器.setVisible(false);
        this.dispose(); // 释放系统资源
        // System.exit(0); // 程序结束
    }

    /**
     * 运行Navicat.
     */
    private void runNavicat() {
        try {
            Runtime.getRuntime().exec(
                    "C:\\Program Files\\Navicat for MySQL\\navicat.exe");
        } catch (final IOException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * 暂时不需要的功能.
     */
    private void saveAllName() { // 暂时不需要的功能
    }

    /**
     * 储存讯息.
     */
    private void saveLog() {
        if (ManagerControl.get().isAction()) {
            上方框内的文字.append("\n─────────────────────────────");
            上方框内的文字.append("\n- 储存讯息...");
            try {
                final BufferedWriter bw = new BufferedWriter(new FileWriter(
                        "Manager_Log/Manager.Log" + this.date
                                + " (Server Log).txt"));
                bw.write(上方框内的文字.getText() + "\r\n");
                bw.close();

                final BufferedWriter bw2 = new BufferedWriter(new FileWriter(
                        "Manager_Log/Manager.Log" + this.date
                                + " (Chat Log).txt"));
                bw2.write("\r\n\r\n Server Manager - Chat Log \n\n"
                        + 聊天窗口.getText());
                bw2.close();
                上方框内的文字.append("\n所有服务器讯息与聊天资料已记录到 Manager_Log文件夹内.");
            } catch (final IOException ie) {
                // LOG.log(Level.SEVERE, "保存聊天记录出错.", ie);
                LOG.log(Level.SEVERE, ie.getLocalizedMessage(), ie);
            }
            // 上方框内的文字.append("\n所有玩家的资料记录到 SQL..");
            this.saveAllName();
            上方框内的文字.append("- 完成.");
            final int time = 3000;
            try {
                Thread.sleep(time);
            } catch (final InterruptedException e) {
                e.printStackTrace();
            }
        } else {
            上方框内的文字.append("\n- 服务器没有运行.");
        }
    }

    /**
     * 给世界内所有的角色发送信息.
     * 
     * @param text
     *            要发送的信息
     */
    private void sendMessageAll(final String text) {
        for (final L1PcInstance pc : L1World.getInstance().getAllPlayers()) {
            pc.sendPackets(new S_SystemMessage(text));
        }
    }

    /**
     * 服务器设置.
     */
    private void serverConfg() {
        final int armor = Integer.parseInt(TEXT_冲防具成功率.getText());
        Config.ENCHANT_CHANCE_ARMOR = armor;
        final Float weight = Float.parseFloat(TEXT_角色负重倍率.getText());
        final double weight2 = (double) weight;
        Config.RATE_WEIGHT_LIMIT = weight2;
        final Float lauful = Float.parseFloat(TEXT_正义值倍率.getText());
        final double lauful2 = (double) lauful;
        Config.RATE_LA = lauful2;
        final int enchant = Integer.parseInt(TEXT_冲武器成功率.getText());
        Config.ENCHANT_CHANCE_WEAPON = enchant;
        final Float aden = Float.parseFloat(TEXT_掉落金钱倍率.getText());
        final double aden2 = (double) aden;
        Config.RATE_DROP_ADENA = aden2;
        final Float dropRate = Float.parseFloat(TEXT_掉落物品倍率.getText());
        final double dropRate2 = (double) dropRate;
        Config.RATE_DROP_ITEMS = dropRate2;
        final Float expRate = Float.parseFloat(TEXT_经验值倍率.getText());
        final double expRate2 = (double) expRate;
        Config.RATE_XP = expRate2;
        final int chatlvl = Integer.parseInt(TEXT_全体聊天最低等级限制.getText());
        final short chatlvl2 = (short) chatlvl;
        Config.GLOBAL_CHAT_LEVEL = chatlvl2;
        final int max = Integer.parseInt(TEXT_最高在线玩家数量.getText());
        final short max2 = (short) max;
        Config.MAX_ONLINE_USERS = max2;
        @SuppressWarnings("unused")
        int account = 1;

        上方框内的文字.append("\n[讯息] 服务器设置: 最高在线玩家数量 " + Config.MAX_ONLINE_USERS
                + " 人.");

        if (Integer.parseInt(TEXT_自动创建账号方式.getText()) == 1) {
            Config.AUTO_CREATE_ACCOUNTS = true;
            上方框内的文字.append("\n[讯息] 服务器设置: 账号产生的方法为: 自动.");
            account = 1;
        } else if (Integer.parseInt(TEXT_自动创建账号方式.getText()) == 0) {
            Config.AUTO_CREATE_ACCOUNTS = false;
            上方框内的文字.append("\n[讯息] 服务器设置: 账号产生的方法为: 手动.");
            account = 0;
        }
        上方框内的文字.append("\n[讯息] 服务器设置: 经验值倍率\t " + expRate2 + "\t倍.");
        上方框内的文字.append("\n[讯息] 服务器设置: 正义值倍率\t " + lauful2 + "\t倍.");
        上方框内的文字.append("\n[讯息] 服务器设置: 掉落物品倍率\t " + dropRate2 + "\t倍.");
        上方框内的文字.append("\n[讯息] 服务器设置: 掉落金钱倍率\t " + aden2 + "\t倍.");
        上方框内的文字.append("\n[讯息] 服务器设置: 全体聊天等级\t " + chatlvl2 + "\t级.");
        上方框内的文字.append("\n[讯息] 服务器设置: 冲武器成功率\t " + enchant + "\t倍.");
        上方框内的文字.append("\n[讯息] 服务器设置: 冲防具成功率\t " + armor + "\t倍.");
        上方框内的文字.append("\n[讯息] 服务器设置: 角色负重倍率\t " + weight2 + "\t倍.");

        if (ManagerControl.get().isSave()) {
            try {
                // XXX
                // 上方框内的文字.append("\n[讯息] 上述资料已成功储存到DB.");
                上方框内的文字.append("\n[讯息] 储存功能未实装.");
            } catch (final Exception e1) {
                e1.printStackTrace();
                上方框内的文字.append("\n[讯息] Serversetting 储存错误.");
            }
        }
    }

    /**
     * 服务器信息.
     */
    private void serverMessage() {
        final File file = new File("./data/服务器信息.txt");
        if (file.exists()) {
            try {
                Runtime.getRuntime().exec(
                        "C:\\WINDOWS\\system32\\notepad.exe ./data/服务器信息.txt");
            } catch (final IOException ex) {
                ex.printStackTrace();
            }
        } else {
            上方框内的文字.append("\n服务器信息.txt 文件未找到.");
        }
    }

    /**
     * 创建账号(小框架).
     */
    private void setAccount() {
        if (ManagerControl.get().isAction()) {
            框架_创建账号.setLayout(new FlowLayout());
            框架_创建账号.setSize(200, 175);
            框架_创建账号.setLocation(200, 175);
            框架_创建账号.setResizable(false);
            框架_创建账号.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            框架_创建账号.setVisible(true);
        } else {
            上方框内的文字.append("\n服务器没有运行.");
        }
    }

    /**
     * 送礼(小框架).
     */
    private void setGive() {
        if (ManagerControl.get().isAction()) {
            框架_送礼.setLayout(new FlowLayout());
            框架_送礼.setSize(250, 200);
            框架_送礼.setLocation(200, 175);
            框架_送礼.setResizable(false);
            框架_送礼.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            框架_送礼.setVisible(true);
        } else {
            上方框内的文字.append("\n服务器没有运行.");
        }
    }

    /**
     * 强制移动(小框架).
     */
    private void setMove() {
        if (ManagerControl.get().isAction()) {
            框架_强制移动.setLayout(new FlowLayout());
            框架_强制移动.setSize(200, 175);
            框架_强制移动.setLocation(200, 175);
            框架_强制移动.setResizable(false);
            框架_强制移动.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            框架_强制移动.setVisible(true);
        } else {
            上方框内的文字.append("\n服务器没有运行.");
        }
    }

    /**
     * 强制变身(小框架).
     */
    private void setPoly() {
        if (ManagerControl.get().isAction()) {
            框架_强制变身.setLayout(new FlowLayout());
            框架_强制变身.setSize(250, 200);
            框架_强制变身.setLocation(200, 175);
            框架_强制变身.setResizable(false);
            框架_强制变身.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            框架_强制变身.setVisible(true);
        } else {
            上方框内的文字.append("\n服务器没有运行.");
        }
    }

    /**
     * 服务器功能设置(小框架).
     */
    private void setServer() {
        if (ManagerControl.get().isAction()) {
            TEXT_冲武器成功率.setText("" + Config.ENCHANT_CHANCE_WEAPON);
            TEXT_掉落金钱倍率.setText("" + Config.RATE_DROP_ADENA);
            TEXT_掉落物品倍率.setText("" + Config.RATE_DROP_ITEMS);
            TEXT_经验值倍率.setText("" + Config.RATE_XP);
            TEXT_全体聊天最低等级限制.setText("" + Config.GLOBAL_CHAT_LEVEL);
            TEXT_最高在线玩家数量.setText("" + Config.MAX_ONLINE_USERS);
            TEXT_冲防具成功率.setText("" + Config.ENCHANT_CHANCE_ARMOR);
            TEXT_角色负重倍率.setText("" + Config.RATE_WEIGHT_LIMIT);
            TEXT_正义值倍率.setText("" + Config.RATE_LA); // 正义值倍率

            // 是否自动创建账号
            if (Config.AUTO_CREATE_ACCOUNTS) { // 自动
                TEXT_自动创建账号方式.setText("1");
            } else if (!Config.AUTO_CREATE_ACCOUNTS) { // 手动
                TEXT_自动创建账号方式.setText("0");
            }

            框架_服务器设置.setLayout(new FlowLayout());
            框架_服务器设置.setSize(340, 280);
            框架_服务器设置.setLocation(540, 360);
            框架_服务器设置.setResizable(false);
            框架_服务器设置.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            框架_服务器设置.setVisible(true);
        } else {
            上方框内的文字.append("\n服务器没有运行.");
        }
    }

    /**
     * 查看当前在线玩家.
     */
    private void showAllPc() {
        if (ManagerControl.get().isAction()) {
            上方框内的文字.append("\n─────────────────────────────\n当前在线列表");
            for (final L1PcInstance pc : L1World.getInstance().getAllPlayers()) {
                上方框内的文字.append("\n[" + pc.getName() + "] *坐标:" + pc.getX()
                        + ", " + pc.getY() + ", " + pc.getMapId() + "  *等级:"
                        + pc.getLevel() + "  *IP:"
                        + pc.getNetConnection().getIp());
            }
        } else {
            上方框内的文字.append("\n服务器没有运行.");
        }
    }

    @Override
    public void windowActivated(final WindowEvent e) {
    }

    // 实现的抽象方法.
    @Override
    public void windowClosed(final WindowEvent e) {
        this.dispose(); // 释放系统资源
        System.exit(0); // 程序结束
    }

    @Override
    public void windowClosing(final WindowEvent e) {
        this.saveLog(); // 储存讯息
        this.dispose(); // 释放系统资源
        System.exit(0); // 程序结束
    }

    @Override
    public void windowDeactivated(final WindowEvent e) {
    }

    @Override
    public void windowDeiconified(final WindowEvent e) {
    }

    @Override
    public void windowIconified(final WindowEvent e) {
    }

    @Override
    public void windowOpened(final WindowEvent e) {
    }

}
